package capa_interfaz;

import capa_dominio.*;
import miCartera.MiCartera;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Esperanza
 */
public class FEditarGasto implements CommandListener , ItemStateListener{
    private ControladorInterfaz contrinterfaz;
    private Form formueditargasto;
    private Command regresar, cambiar, borrar;
    private TextField categoria;
    private TextField cantidad;
    private DateField campoDate;
    private ChoiceGroup eligemoneda;
    private MiCartera midlet;
    public String cadenafecha,cadenacategoria,cadenacantidad,cadenamoneda;
    public int indicemoneda;
    private SuperDate fechasuperdate;
    private Date fechadate;
    private String[] listamonedas;
    public int posicionrs;


    public FEditarGasto(ControladorInterfaz controlador, MiCartera midlet, String[] cadenagasto, int posicionrecordstore){
        //Guardo referencia a controlador para delegar peticiones
        this.contrinterfaz=controlador;

        //Guardo referencia al midlet con pantalla principal
        this.midlet=midlet;

        //Guardo posicion en el RecordStore del gasto seleccionado
        this.posicionrs=posicionrecordstore;

        //Extraigo campos
        cadenafecha=cadenagasto[0];
        cadenacategoria=cadenagasto[1];
        cadenacantidad=cadenagasto[2].substring(0, cadenagasto[2].indexOf(" "));
        cadenamoneda=cadenagasto[2].substring(cadenagasto[2].indexOf(" ")+1, cadenagasto[2].length());

        //Creo los objetos
        formueditargasto=new Form("Edita Gasto");
        campoDate=new DateField("Establece fecha", DateField.DATE);
        categoria=new TextField("Categoria del gasto",cadenacategoria, midlet.pantallainicial.getWidth(),TextField.ANY);
        cantidad=new TextField("Cantidad del gasto", cadenacantidad, midlet.pantallainicial.getWidth(),TextField.NUMERIC);
        eligemoneda=new ChoiceGroup("Lista Monedas",Choice.EXCLUSIVE);
        regresar=new Command("Atras",Command.BACK,1);
        cambiar=new Command("Cambia", Command.OK,1);
        borrar=new Command("Borra", Command.OK,1);
        fechasuperdate=new SuperDate();

        //Transformo cadena fecha a un Date
        cadenafecha=cadenafecha+"-00:00:00.0";//Formato de 21 caracteres para usar parseDate de SuperDate
        fechadate=fechasuperdate.parseDate(cadenafecha);
        cadenafecha=cadenafecha.substring(0,cadenafecha.indexOf("-00:00:00.0"));

        //Establezco en DateField la fecha del gasto
        campoDate.setDate(fechadate);
         //Extraigo lista de monedas
        listamonedas=contrinterfaz.extraeMonedas();

        //Caluculo número de registros por tamaño de array
        double n=(-2+Math.sqrt(4+4*listamonedas.length))/2;
        System.out.println("Número de n, número de registros calculados por array:"+String.valueOf(n));
        //Pasamos a entero redondeando hacia abajo
        int nentero=(int)n;

        for (int i=0; i<= listamonedas.length-1;i=i+nentero+2){
            String cadena=null;
            cadena=listamonedas[i]+":"+listamonedas[i+1];
            eligemoneda.append(cadena, null);
        }

        //Seleccionar el elemento de la lista de monedas a través de cadenamoneda
        indicemoneda=contrinterfaz.buscaMonedaRecordStore(cadenamoneda);
        System.out.println("Indice moneda para choicegroup:"+indicemoneda);
        eligemoneda.setSelectedIndex(indicemoneda, true);
        
         //Enlazo Items al formulario de pantalla
        formueditargasto.append(campoDate);
        formueditargasto.append(categoria);
        formueditargasto.append(cantidad);
        formueditargasto.append(eligemoneda);

         //Enlazo objetos a Form y escucha de comandos
        formueditargasto.addCommand(regresar);
        formueditargasto.addCommand(cambiar);
        formueditargasto.addCommand(borrar);
        formueditargasto.setCommandListener(this);

        //Hago escucha de Items
        formueditargasto.setItemStateListener(this);

        //Establecemos como pantalla
        midlet.pantalla.setCurrent(formueditargasto);


    }

    public void commandAction(Command c, Displayable d) {
        if (c==regresar){
            midlet.pantalla.setCurrent(midlet.pantallainicial);
        }else if (c==cambiar){            
            contrinterfaz.cambiaGastoRecordStore(this);
        }else if (c==borrar){
            FBorrarGasto formuborrar;
            //Creamos nuevo formulario de advertencia
            formuborrar=new FBorrarGasto (this, midlet, contrinterfaz);

            contrinterfaz.borrarGastoRecordStore(posicionrs);
        }
    }

    public void itemStateChanged(Item item) {
         if (item==campoDate){
            //Extraemos date de datefield
            Date fecha=new Date();
            fecha=campoDate.getDate();
            System.out.println(fecha.toString());
            //Utilizamos un objeto Calendar para manejar dia,mes,año
            Calendar cal = Calendar.getInstance();
            cal.setTime(fecha);
            //Establecemos campofecha a modo String
            int dia=cal.get(Calendar.DAY_OF_MONTH);
            int mes=cal.get(Calendar.MONTH)+1;
            int ano=cal.get(Calendar.YEAR);

            cadenafecha=(dia<10? "0": "")+dia+"-"+(mes<10? "0": "")+mes+"-"+(ano<10? "0": "")+ano;

           System.out.println(cadenafecha);


        }else if (item==categoria){
            //Extraemos campo categoria de un textfield de cadenas
            cadenacategoria=categoria.getString();

        }else if (item==cantidad){
            //Extraemos campo cantidad de un texfield numérico
            cadenacantidad=cantidad.getString();

        }else if (item==eligemoneda){
            indicemoneda=eligemoneda.getSelectedIndex();

        }else{
            midlet.pantalla.setCurrent(formueditargasto);
        }
    }

     public void muestraErrorFecha(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce fecha", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        //Establecemos alert para mostrar y posteriormente a formueditargasto
        midlet.pantalla.setCurrent(alertaerror, formueditargasto);

    }
    public void muestraErrorCategoria(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce categoria", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        midlet.pantalla.setCurrent(alertaerror, formueditargasto);

    }
    public void muestraErrorCantidad(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce cantidad", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        midlet.pantalla.setCurrent(alertaerror, formueditargasto);

    }
    public void avisoCreacion(){
        Alert alerta;

        alerta=new Alert("Aviso", "Cangrulations!Has cambiado el gasto", null, AlertType.INFO);
        alerta.setTimeout(Alert.FOREVER);//Alerta modal
        //Despues establecemos el form de pantallainicial
        midlet.pantalla.setCurrent(alerta, midlet.pantallainicial);

    }
}
